<?php
namespace app\admin\model;

use support\think\Model;
use think\model\relation\BelongsToMany;
use think\facade\Db;
class Admin extends Model
{
 

    /**
     * 数据表名称
     * @var string
     */
    protected $name = 'admins';
    /**
     * 数据表主键
     * @var string
     */
    protected $pk = 'id';
    /**
     * 隐藏字段
     * @var array
     */
    protected $hidden = ['password'];
    /**
     * 是否需要自动写入时间戳，设置为'int'则为时间戳格式
     * @var bool|string
     */
    protected $autoWriteTimestamp = 'int';

    /**
     * 创建时间字段
     * @var string
     */
    protected $createTime = 'created_at';

    /**
     * 更新时间字段
     * @var string
     */
    protected $updateTime = 'updated_at';
    /**
     * 最后登录时间字段
     * @var string
     */
    public function getLastLoginAtAttr($value)
    {
        return $value ? date('Y-m-d H:i:s', $value) : null;
    }
    /**
     * 定义管理员与角色的多对多关联
     * @return BelongsToMany
     */
    public function roles(): BelongsToMany
    {
        // 关联模型, 中间表, 关联模型外键, 当前模型外键
        return $this->belongsToMany(
            Role::class, 
            'admin_role',
            'role_id', 
            'admin_id'
        );
    }  
    /**
     * 获取当前管理员拥有的 type=2 和 type=3 权限标识
     * @return array
     */
    public function getAllPermissions($adminId): array
    {
        $adminId = (int)$adminId;
        if ($adminId === 1) {
            // 超级管理员拥有所有 type=2/3 权限
            return Menu::whereIn('type', [2, 3])
                ->where('status', 1)
                ->whereNotNull('permission')
                ->where('permission', '<>', '')
                ->column('permission');
        } else {
            $roleIds = Db::name('admin_role')->where('admin_id', $adminId)->column('role_id');
            if (empty($roleIds)) {
                return [];
            }
            $menuIds = Db::name('role_menu')->whereIn('role_id', $roleIds)->column('menu_id');
            if (empty($menuIds)) {
                return [];
            }
            return Menu::whereIn('id', array_unique($menuIds))
                ->whereIn('type', [2, 3])
                ->where('status', 1)
                ->whereNotNull('permission')
                ->where('permission', '<>', '')
                ->column('permission');
        }
    }


}